package com.mobibusbr.bean;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import com.mobibusbr.facade.MobiBusBrFacade;
import com.mobibusbr.interfaces.EntidadeMobiBusBR;
import com.mobibusbr.model.Cidade;
import com.mobibusbr.model.Dias_Funcionamento;
import com.mobibusbr.model.Horario;
import com.mobibusbr.model.Linha;



@SessionScoped
@ManagedBean(name="mobibusCadastro")
public class MBMobibusCadastro {
	
	private Long cidade_origem;
	private Long cidade_destino;
	private Map<String, Long> cidades;
	private MobiBusBrFacade dao;
	private List<String> dias_semana = new ArrayList<String>();
	private List<EntidadeMobiBusBR> lista_cidade;
	private String partida;
	private String retorno;

	private Linha linha;

	private SelectItem[] dias = {
			new SelectItem("1", "DOM"),
			new SelectItem("2", "SEG"),
			new SelectItem("3", "TER"),
			new SelectItem("4", "QUA"),
			new SelectItem("5", "QUI"),
			new SelectItem("6", "SEX"),
			new SelectItem("7", "SAB"),
	};	
	
	
	
	public MBMobibusCadastro() {
		dao = new MobiBusBrFacade();
		setLinha(new Linha());
		montandoBaseInicial();
				
	}
	
	public void montandoBaseInicial(){
		cidades = new LinkedHashMap<String, Long>();
		
		lista_cidade = dao.getLista(new Cidade());
		
		for (EntidadeMobiBusBR entidadeMobiBusBR : lista_cidade) {
			Cidade c = new Cidade();
			c = (Cidade) entidadeMobiBusBR;
			cidades.put(c.getBairro(), c.getId());
		}
		
	}
	
	public String getChamandoMetodo(){
		
		if(linha.getLinha() == null || linha.getLinha().equals("")){
			return "";
		}
		
		//dias da semana
		List<Dias_Funcionamento> dias_func = new ArrayList<Dias_Funcionamento>();
		for (String dia : dias_semana) {
			Dias_Funcionamento df = new Dias_Funcionamento();
			df.setId(new Long(dia));
			dias_func.add(df);
		}
		
		List<Horario> lista_horario = new ArrayList<Horario>();
		
		String[] indicePartida = partida.split(" ");
		String[] indiceRetorno = retorno.split(" ");

		for (int i = 0; i < indicePartida.length; i++) {
			Horario h = new Horario();
			h.setPartida(indicePartida[i]);

			h.setRetorno(indiceRetorno[i]);
			lista_horario.add(h);
		}

		for (EntidadeMobiBusBR c : lista_cidade) {
			if(cidade_origem == c.getId()){
				linha.setCidade_origem((Cidade) c);
			}
			if(cidade_destino == c.getId()){
				linha.setCidade_destino((Cidade) c);
			}
		}
		
		
		linha.setHorario(lista_horario);
		linha.setDias_operacao(dias_func);
		dao.adiciona(linha);
			
		System.out.println("no filtro");

		return "Linha: " +linha.getLinha()+ "  cadastrada com sucesso.          ";
	}
	
	public void limpaCampos(){
		linha = new Linha();
		
	}
	
	public Map<String, Long> getCidades() {
		return cidades;
	}

	public void setCidades(Map<String, Long> cidades) {
		this.cidades = cidades;
	}

	public Long getCidade_origem() {
		return cidade_origem;
	}

	public void setCidade_origem(Long cidade_origem) {
		this.cidade_origem = cidade_origem;
	}

	public Long getCidade_destino() {
		return cidade_destino;
	}

	public void setCidade_destino(Long cidade_destino) {
		this.cidade_destino = cidade_destino;
	}

	public Linha getLinha() {
		return linha;
	}

	public void setLinha(Linha linha) {
		this.linha = linha;
	}

	public SelectItem[] getDias() {
		return dias;
	}

	public void setDias(SelectItem[] dias) {
		this.dias = dias;
	}

	public List<String> getDias_semana() {
		return dias_semana;
	}

	public void setDias_semana(List<String> dias_semana) {
		this.dias_semana = dias_semana;
	}

	public String getPartida() {
		return partida;
	}

	public void setPartida(String partida) {
		this.partida = partida;
	}

	public String getRetorno() {
		return retorno;
	}

	public void setRetorno(String retorno) {
		this.retorno = retorno;
	}

}
